home *** CD-ROM | disk | FTP | other *** search
- Okey-dokey, here's the discname reading patch.
- You were saving some registers that I simply wasn't using in
- Image_IdentifyDisc, so I changed it.
- I'm not entirely sure why you decided to go for signed arithmetic rather
- than unsigned - surely a length is not a negative quantity?
-
- diff -urN Dev.Base.b.Workspace !IscaFS.b.Workspace
- --- Dev.Base.b.Workspace Sat Mar 28 13:24:06 1998
- +++ !IscaFS.b.Workspace Wed Apr 01 19:25:34 1998
- @@ -30,7 +30,7 @@
- ENDIF
-
- REM The MAlloc vectors are added after the main workspace is stored, so
- -REM lwn_workspace% is NOT the real length which will be allocted to the
- +REM len_workspace% is NOT the real length which will be allocated to the
- REM workspace.
- malloc_tabbase% = len_workspace%
- malloc_claim% = malloc_tabbase%+0
- @@ -81,34 +81,46 @@
- REM superblock structure (inside image descriptor structure)
- superblock% = 40
- s_inodes_count% = superblock%
- -s_blocks_count% = superblock%+4
- -s_r_blocks_count% = superblock%+8
- -s_free_blocks_count% = superblock%+12
- -s_free_inodes_count% = superblock%+16
- -s_first_data_block% = superblock%+20
- -s_log_block_size% = superblock%+24
- -s_log_frag_size% = superblock%+28
- -s_blocks_per_group% = superblock%+32
- -s_frags_per_group% = superblock%+36
- -s_inodes_per_group% = superblock%+40
- -s_mtime% = superblock%+44
- -s_wtime% = superblock%+48
- -s_mnt_count% = superblock%+52
- -s_max_mnt_count% = superblock%+54
- -s_magic% = superblock%+56
- -s_state% = superblock%+58
- -s_errors% = superblock%+60
- -s_minor_rev_level% = superblock%+62
- -s_lastcheck% = superblock%+64
- -s_checkinterval% = superblock%+68
- -s_creator_os% = superblock%+72
- -s_rev_level% = superblock%+76
- +s_blocks_count% = s_inodes_count%+4
- +s_r_blocks_count% = s_blocks_count%+4
- +s_free_blocks_count% = s_r_blocks_count%+4
- +s_free_inodes_count% = s_free_blocks_count%+4
- +s_first_data_block% = s_free_inodes_count%+4
- +s_log_block_size% = s_first_data_block%+4
- +s_log_frag_size% = s_log_block_size%+4
- +s_blocks_per_group% = s_log_frag_size%+4
- +s_frags_per_group% = s_blocks_per_group%+4
- +s_inodes_per_group% = s_frags_per_group%+4
- +s_mtime% = s_inodes_per_group%+4
- +s_wtime% = s_mtime%+4
- +s_mnt_count% = s_wtime%+4
- +s_max_mnt_count% = s_mnt_count%+2
- +s_magic% = s_max_mnt_count%+2
- +s_state% = s_magic%+2
- +s_errors% = s_state%+2
- +s_minor_rev_level% = s_errors%+2
- +s_lastcheck% = s_minor_rev_level%+2
- +s_checkinterval% = s_lastcheck%+4
- +s_creator_os% = s_checkinterval%+4
- +s_rev_level% = s_creator_os%+4
- +s_def_resuid% = s_rev_level%+4
- +s_def_resgid% = s_def_resuid%+2
- +s_first_ino% = s_def_resgid%+2
- +s_inode_size% = s_first_ino%+4
- +s_block_group_nr% = s_inode_size%+2
- +s_feature_compat% = s_block_group_nr%+2
- +s_feature_incompat% = s_feature_compat%+4
- +s_feature_ro_compat% = s_feature_incompat%+4
- +s_uuid% = s_feature_ro_compat%+4
- +s_volume_name% = s_uuid%+16
- +s_last_mounted% = s_volume_name%+16
- +s_reserved% = s_last_mounted%+64
- REM end of superblock structure
- REM Note: len_superblock% is not the actual length of a superblock, but the
- REM length of it that should be read into the block.
- -len_superblock% = s_rev_level%+4-superblock%
- +len_superblock% = s_reserved%+4-superblock%
-
- -len_mount% = s_rev_level%+4
- +len_mount% = s_reserved%+4
-
-
-
- @@ -139,8 +151,8 @@
-
-
- REM image flags
- -mntflag_size2% = 1 :REM set if blocks are 2k long
- -mntflag_size4% = 1<<1 :REM set if blocks are 4k long
- +REM mntflag_size2% = 1 :REM set if blocks are 2k long
- +REM mntflag_size4% = 1<<1 :REM set if blocks are 4k long
- mntflag_partition% = 1<<2 :REM set if it's a partition (not an image)
-
-
- diff -urN Dev.Base.s.Image !IscaFS.s.Image
- --- Dev.Base.s.Image Sat Mar 28 16:42:22 1998
- +++ !IscaFS.s.Image Wed Apr 01 19:21:16 1998
- @@ -213,13 +213,9 @@
- ; r6 = new sector cache handle
- ; AORP
- ;------------------------
- - FNfunction("r0-r5,r7")
- -;P This is MW's version of this function (which does things properly)
- -;P Errr... well, that's what I thought. Actually, this was corrupting
- -;P registers, and since it's a Service call, not a filesystem entry point,
- -;P that's a Bad Thing (TM).
- + FNfunction("r2-r4,r7")
- ;------------------------
- -; for now, don't worry about sequence sides, shapes etc
- +; an ext2 floppy might have almost any shape. Let's believe Filecore.
- ;------------------------
- ; try to recognise the disc from the special word in the first super block
- MOV r1,#9+(1<<6) ; read sectors via cache, ignore esc
- @@ -226,8 +222,8 @@
- ORR r1,r1,r5,LSL #6
- MOV r4,#s_magic%+4
- CMP r3, #5
- - MOVLE r7, #0
- - MOVGT r7, r2
- + MOVLO r7, #0
- + MOVHS r7, r2
- LDR r2,[r5,#&c] ; disc address of root directory
- MOV r2,r2,LSL #28
- ADD r2,r2,#1024 ; disc address
- @@ -240,6 +236,7 @@
- MOV r2, r2, LSL #16 ;M
- EOR r2, r2, #&ef000000
- TEQ r2, #&00530000
- + MOVNE r1, #&69
- FNcreturn("NE")
- ;------------------------
- ; it is an ext2 disc - return the right info and update the disc shape
- @@ -248,6 +245,18 @@
- ADD r2, r2, #10 ;M
- MOV r1, r1, LSL r2
- STR r1,[r5,#16] ; disc_size
- + ADD r4, r4, #s_volume_name%-superblock%
- + LDMIA r4, {r1-r3} ; get first 12 bytes of name
- + MOV r3, r3, LSL #16 ; drop last 2 characters
- + ORR r3, r3, r2, LSR #16 ; and put the two from r2 in
- + MOV r2, r2, LSL #16 ; drop last 2 characters
- + ORR r2, r2, r1, LSR #16 ; and put the two from r2 in
- + MOV r1, r1, LSL #16 ; put the first two chars at the top
- + LDR r14, [r4, #s_volume_name%-s_wtime%]
- + MOV r14, r14, LSL #16 ; put the lsb at the top..
- + ORR r1, r1, r14, LSR #16 ; and then ORR it into the bottom.
- + ADD r4, r5, #20
- + STMIA r4, {r1-r3} ; set up the name & cycle ID
- TEQ r7, #0
- BEQ _no_space_for_formatname
- LDR r2, _ext2_word
-